home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / nss / secder.h < prev    next >
C/C++ Source or Header  |  2006-04-20  |  8KB  |  224 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is the Netscape security libraries.
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  * Netscape Communications Corporation.
  18.  * Portions created by the Initial Developer are Copyright (C) 1994-2000
  19.  * the Initial Developer. All Rights Reserved.
  20.  *
  21.  * Contributor(s):
  22.  *
  23.  * Alternatively, the contents of this file may be used under the terms of
  24.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  25.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  26.  * in which case the provisions of the GPL or the LGPL are applicable instead
  27.  * of those above. If you wish to allow use of your version of this file only
  28.  * under the terms of either the GPL or the LGPL, and not to allow others to
  29.  * use your version of this file under the terms of the MPL, indicate your
  30.  * decision by deleting the provisions above and replace them with the notice
  31.  * and other provisions required by the GPL or the LGPL. If you do not delete
  32.  * the provisions above, a recipient may use your version of this file under
  33.  * the terms of any one of the MPL, the GPL or the LGPL.
  34.  *
  35.  * ***** END LICENSE BLOCK ***** */
  36.  
  37. #ifndef _SECDER_H_
  38. #define _SECDER_H_
  39.  
  40. /*
  41.  * secder.h - public data structures and prototypes for the DER encoding and
  42.  *          decoding utilities library
  43.  *
  44.  * $Id: secder.h,v 1.7 2004/04/25 15:03:18 gerv%gerv.net Exp $
  45.  */
  46.  
  47. #if defined(_WIN32_WCE)
  48. #else
  49. #include <time.h>
  50. #endif
  51.  
  52. #include "plarena.h"
  53. #include "prlong.h"
  54.  
  55. #include "seccomon.h"
  56. #include "secdert.h"
  57. #include "prtime.h"
  58.  
  59. SEC_BEGIN_PROTOS
  60.  
  61. /*
  62. ** Decode a piece of der encoded data.
  63. **     "dest" points to a structure that will be filled in with the
  64. **       decoding results.  (NOTE: it should be zeroed before calling;
  65. **       optional/missing fields are not zero-filled by DER_Decode.)
  66. **    "t" is a template structure which defines the shape of the
  67. **       expected data.
  68. **    "src" is the der encoded data.
  69. ** NOTE: substructures of "dest" will be allocated as needed from
  70. ** "arena", but data subfields will point directly into the buffer
  71. ** passed in as src->data.  That is, the resulting "dest" structure
  72. ** will contain pointers back into src->data, which must remain
  73. ** active (allocated) and unmodified for as long as "dest" is active.
  74. ** If this is a potential problem, you may want to just dup the buffer
  75. ** (allocated from "arena", probably) and pass *that* in instead.
  76. */
  77. extern SECStatus DER_Decode(PRArenaPool *arena, void *dest, DERTemplate *t,
  78.                SECItem *src);
  79.  
  80. /*
  81. ** Encode a data structure into DER.
  82. **    "dest" will be filled in (and memory allocated) to hold the der
  83. **       encoded structure in "src"
  84. **    "t" is a template structure which defines the shape of the
  85. **       stored data
  86. **    "src" is a pointer to the structure that will be encoded
  87. */
  88. extern SECStatus DER_Encode(PRArenaPool *arena, SECItem *dest, DERTemplate *t,
  89.                void *src);
  90.  
  91. extern SECStatus DER_Lengths(SECItem *item, int *header_len_p, uint32 *contents_len_p);
  92.  
  93. /*
  94. ** Lower level der subroutine that stores the standard header into "to".
  95. ** The header is of variable length, based on encodingLen.
  96. ** The return value is the new value of "to" after skipping over the header.
  97. **    "to" is where the header will be stored
  98. **    "code" is the der code to write
  99. **    "encodingLen" is the number of bytes of data that will follow
  100. **       the header
  101. */
  102. extern unsigned char *DER_StoreHeader(unsigned char *to, unsigned int code,
  103.                       uint32 encodingLen);
  104.  
  105. /*
  106. ** Return the number of bytes it will take to hold a der encoded length.
  107. */
  108. extern int DER_LengthLength(uint32 len);
  109.  
  110. /*
  111. ** Store a der encoded *signed* integer (whose value is "src") into "dst".
  112. ** XXX This should really be enhanced to take a long.
  113. */
  114. extern SECStatus DER_SetInteger(PRArenaPool *arena, SECItem *dst, int32 src);
  115.  
  116. /*
  117. ** Store a der encoded *unsigned* integer (whose value is "src") into "dst".
  118. ** XXX This should really be enhanced to take an unsigned long.
  119. */
  120. extern SECStatus DER_SetUInteger(PRArenaPool *arena, SECItem *dst, uint32 src);
  121.  
  122. /*
  123. ** Decode a der encoded *signed* integer that is stored in "src".
  124. ** If "-1" is returned, then the caller should check the error in
  125. ** XP_GetError() to see if an overflow occurred (SEC_ERROR_BAD_DER).
  126. */
  127. extern long DER_GetInteger(SECItem *src);
  128.  
  129. /*
  130. ** Decode a der encoded *unsigned* integer that is stored in "src".
  131. ** If the ULONG_MAX is returned, then the caller should check the error
  132. ** in XP_GetError() to see if an overflow occurred (SEC_ERROR_BAD_DER).
  133. */
  134. extern unsigned long DER_GetUInteger(SECItem *src);
  135.  
  136. /*
  137. ** Convert a "UNIX" time value to a der encoded time value.
  138. **    "result" is the der encoded time (memory is allocated)
  139. **    "time" is the "UNIX" time value (Since Jan 1st, 1970).
  140. ** The caller is responsible for freeing up the buffer which
  141. ** result->data points to upon a successfull operation.
  142. */
  143. extern SECStatus DER_TimeToUTCTime(SECItem *result, int64 time);
  144. extern SECStatus DER_TimeToUTCTimeArena(PRArenaPool* arenaOpt,
  145.                                         SECItem *dst, int64 gmttime);
  146.  
  147.  
  148. /*
  149. ** Convert an ascii encoded time value (according to DER rules) into
  150. ** a UNIX time value.
  151. **    "result" the resulting "UNIX" time
  152. **    "string" the der notation ascii value to decode
  153. */
  154. extern SECStatus DER_AsciiToTime(int64 *result, const char *string);
  155.  
  156. /*
  157. ** Same as DER_AsciiToTime except takes an SECItem instead of a string
  158. */
  159. extern SECStatus DER_UTCTimeToTime(int64 *result, const SECItem *time);
  160.  
  161. /*
  162. ** Convert a DER encoded UTC time to an ascii time representation
  163. ** "utctime" is the DER encoded UTC time to be converted. The
  164. ** caller is responsible for deallocating the returned buffer.
  165. */
  166. extern char *DER_UTCTimeToAscii(SECItem *utcTime);
  167.  
  168. /*
  169. ** Convert a DER encoded UTC time to an ascii time representation, but only
  170. ** include the day, not the time.
  171. **    "utctime" is the DER encoded UTC time to be converted.
  172. ** The caller is responsible for deallocating the returned buffer.
  173. */
  174. extern char *DER_UTCDayToAscii(SECItem *utctime);
  175. /* same thing for DER encoded GeneralizedTime */
  176. extern char *DER_GeneralizedDayToAscii(SECItem *gentime);
  177. /* same thing for either DER UTCTime or GeneralizedTime */
  178. extern char *DER_TimeChoiceDayToAscii(SECItem *timechoice);
  179.  
  180. /*
  181. ** Convert a int64 time to a DER encoded Generalized time
  182. */
  183. extern SECStatus DER_TimeToGeneralizedTime(SECItem *dst, int64 gmttime);
  184. extern SECStatus DER_TimeToGeneralizedTimeArena(PRArenaPool* arenaOpt,
  185.                                                 SECItem *dst, int64 gmttime);
  186.  
  187. /*
  188. ** Convert a DER encoded Generalized time value into a UNIX time value.
  189. **    "dst" the resulting "UNIX" time
  190. **    "string" the der notation ascii value to decode
  191. */
  192. extern SECStatus DER_GeneralizedTimeToTime(int64 *dst, const SECItem *time);
  193.  
  194. /*
  195. ** Convert from a int64 UTC time value to a formatted ascii value. The
  196. ** caller is responsible for deallocating the returned buffer.
  197. */
  198. extern char *CERT_UTCTime2FormattedAscii (int64 utcTime, char *format);
  199. #define CERT_GeneralizedTime2FormattedAscii CERT_UTCTime2FormattedAscii
  200.  
  201. /*
  202. ** Convert from a int64 Generalized time value to a formatted ascii value. The
  203. ** caller is responsible for deallocating the returned buffer.
  204. */
  205. extern char *CERT_GenTime2FormattedAscii (int64 genTime, char *format);
  206.  
  207. /*
  208. ** decode a SECItem containing either a SEC_ASN1_GENERALIZED_TIME 
  209. ** or a SEC_ASN1_UTC_TIME
  210. */
  211.  
  212. extern SECStatus DER_DecodeTimeChoice(PRTime* output, const SECItem* input);
  213.  
  214. /* encode a PRTime to an ASN.1 DER SECItem containing either a
  215.    SEC_ASN1_GENERALIZED_TIME or a SEC_ASN1_UTC_TIME */
  216.  
  217. extern SECStatus DER_EncodeTimeChoice(PRArenaPool* arena, SECItem* output,
  218.                                        PRTime input);
  219.  
  220. SEC_END_PROTOS
  221.  
  222. #endif /* _SECDER_H_ */
  223.  
  224.